/**
 * 1 数组解构  按索引位置进行取值的
 * 2 对象解构  取出对象中的key值
 * 3 模版字符串 ``  支持换行
 * 4 字符串的扩展方法
 *    startsWith() 判断是否以某个字符开头
      endsWith()判断是否以某个字符结尾
      includes()判断是否包含某个字符
 * 5 展开运算符 ...
      合并数组
      替代apply
      浅拷贝   
   6 箭头函数不会改变this的指向
   7 对象字面量
      当我们对象中的属性名和值相等的时候，我们可以把值省略
      当我们想用表达式生成对象的属性名的时猴，我们可以在[]中写入我们的表达式
   8 Object.assign()
     Object.assign方法用于对象的合并，将源对象（source）的所有可枚举属性，复制到目标对象（target）,
     如果目标对象与源对象有同名属性，或多个源对象有同名属性，则后面的属性覆盖前面的属性
     还可用于对象的浅拷贝，

 */
import React from 'react';

function Jiegou() {
  const arr = ['a', 'b', 'c'];
  const [a1, b1, c1] = arr; // 分别给a1,b1,c1赋值的是arr数组里坐标为0，1，2的值
  console.log(a1, b1, c1); // a,b,c

  const obj = { name: 'xuke', age: 22 };
  const { age } = obj;
  console.log(age); // 22

  const str = `her name is ${obj.name}`;
  console.log(str); // her name
  // is xuke

  const mes = 'welcome to shandong';
  console.log(mes.startsWith('wel')); // true
  console.log(mes.startsWith('welcome to shandong')); // true
  console.log(mes.endsWith('dong')); // true
  console.log(mes.includes('to')); // true
  console.log(mes.includes('toshandong')); // false

  const a = [1, 2, 3];
  const b = [4, 5, 6];
  const c = [...a, ...b];
  console.log(c); // [1,2,3,4,5,6]
  function f(a: number, b: number, c: number) {
    console.log(a, b, c);
  }
  let args: [number, number, number]; // 使用元组类型
  args = [1, 2, 3];
  // 以下方法结果相同
  // f.apply(null, args); // 1，2，3
  f(...args); // 1，2，3

  // 浅拷贝
  // 数组
  const e = [1, 2, 4];
  const g = [...e]; // 相当于  JSON.parse（JSON.stringify(e)）
  e.push(6);
  console.log(g); // [1,2,4]

  return <div />;
}
export default Jiegou;
